home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue53 / Multicas / Example2 / UnitFormMain.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-10-14  |  2.1 KB  |  96 lines

  1. unit UnitFormMain;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   UnitMulticaster, StdCtrls;
  8.  
  9. type
  10.  
  11.     TEventAfterChange = class(TEvent);
  12.   TStringObject = class(TComponent)
  13.   private
  14.     FValue: string;
  15.     FMulticaster: TEventMulticaster;
  16.     procedure SetValue(const aValue: string);
  17.   public
  18.     constructor Create(Owner: TComponent);
  19.     destructor Destroy; override;
  20.     property Multicaster: TEventMulticaster read FMulticaster;
  21.     property Value: string read FValue write SetValue;
  22.   end;
  23.  
  24.   TFormMain = class(TForm)
  25.     Edit1: TEdit;
  26.     Button1: TButton;
  27.     Label1: TLabel;
  28.     procedure FormCreate(Sender: TObject);
  29.     procedure FormDestroy(Sender: TObject);
  30.     procedure Edit1Change(Sender: TObject);
  31.     procedure Button1Click(Sender: TObject);
  32.   private
  33.     FMulticaster: TEventMulticaster;
  34.     FUserName: TStringObject;
  35.   public
  36.     public property UserName: TStringObject read FUserName;
  37.     property Multicaster: TEventMulticaster read FMulticaster;
  38.   end;
  39.     TEventUserNameChange = class(TEvent);
  40.  
  41. var
  42.   FormMain: TFormMain;
  43.  
  44. implementation
  45.  
  46. {$R *.DFM}
  47.  
  48. uses UnitFormListener;
  49.  
  50. procedure TFormMain.FormCreate(Sender: TObject);
  51. begin
  52.   FMulticaster := TEventMulticaster.Create;
  53.   FUserName := TStringObject.Create(Self);
  54. end;
  55.  
  56. procedure TFormMain.FormDestroy(Sender: TObject);
  57. begin
  58.     FMulticaster.Free;
  59. end;
  60.  
  61. procedure TFormMain.Edit1Change(Sender: TObject);
  62. begin
  63.   UserName.Value := Edit1.Text;
  64. end;
  65.  
  66. procedure TFormMain.Button1Click(Sender: TObject);
  67. begin
  68.   TFormListener.Create(Self).Show;
  69. end;
  70.  
  71. { TStringObject }
  72.  
  73. constructor TStringObject.Create(Owner: TComponent);
  74. begin
  75.   inherited;
  76.   FMulticaster := TEventMulticaster.Create;
  77.   FValue := '';
  78. end;
  79.  
  80. destructor TStringObject.Destroy;
  81. begin
  82.   FMulticaster.Destroy;
  83.   inherited;
  84. end;
  85.  
  86. procedure TStringObject.SetValue(const aValue: string);
  87. begin
  88.   if (aValue <> Value) then
  89.   begin
  90.     FValue := aValue;
  91.     Multicaster.Broadcast(TEventAfterChange.Create(Self));
  92.   end; // then begin
  93. end;
  94.  
  95. end.
  96.